package com.hqq.concurrency.half_syn_half_async;

import java.util.concurrent.Callable;

/**
 * AsyncTask
 * 封装了一些异步执行的操作和结果。这些操作一般是在后台线程中运行然后将结果通过回调方法传递给调用者
 * Created by heqianqian on 2017/8/9.
 */
public interface AsyncTask<T> extends Callable<T> {

    /**
     * 调用{@link #call()}之前调用 比较大的任务不应该放在此处执行 很有可能会阻塞调用线程
     * 适合一些小的诸如验证的任务
     */
    void onPreCall();

    /**
     * 在{@link #call()}调用之后执行.
     * @param result 程序执行结果
     */
    void onPostCall(T result);

    /**
     * 执行中抛出异常的回调方法
     * 当{@link #call()}或者{@link #onPreCall()}抛出异常时调用
     * @param throwable 异常
     */
    void onError(Throwable throwable);


    /**
     * 调用执行方法
     * @return  返回结果
     * @throws Exception 可能产生的异常
     */
    @Override
    T call() throws Exception;
}











